#include <string.h>
#include "salsa20.h"

void salsa20R8(uint32_t X[16])
{
	int i;
	uint32_t B[16];
    
    memcpy(B, X, 16 * sizeof(uint32_t));
	for (i = 0; i < 8; i += 2) {
		// Odd round
		QR(B[ 0], B[ 4], B[ 8], B[12]); // column 1
		QR(B[ 5], B[ 9], B[13], B[ 1]); // column 2
		QR(B[10], B[14], B[ 2], B[ 6]); // column 3
		QR(B[15], B[ 3], B[ 7], B[11]); // column 4
		// Even round
		QR(B[ 0], B[ 1], B[ 2], B[ 3]); // row 1
		QR(B[ 5], B[ 6], B[ 7], B[ 4]); // row 2
		QR(B[10], B[11], B[ 8], B[ 9]); // row 3
		QR(B[15], B[12], B[13], B[14]); // row 4
	}
    //
	for (i = 0; i < 16; ++i) {
        X[i] += B[i];
    }
}
